Python使用@property方法改变方法为参数 您所在的位置:网站首页 python @property作用 Python使用@property方法改变方法为参数

Python使用@property方法改变方法为参数

2024-07-16 01:40| 来源: 网络整理| 查看: 265

回归基础,学习了一波 使用@property 加上了很多自己慢慢的摸索

class Test(object): def __init__(self): self.__A = 1 def changeA(self, value): self.__A = value def getA(self): return self.__A @property def A(self): return self.__A @A.setter def A(self, value): self.__A = value @A.getter def A(self): return self.__A

上面构造出来的类,实现了将一个类变成元素的方法。这句话很抽象,但是当你看了下面的使用的时候,你就会发现了,其实很简单

t = Test() t.changeA(2) t.A = 3

在上面的测试代码中,我是实例化了一个Test类。然后第一步是用了一个public的函数changeA()。使用这个函数,当然很容易就知道了会改变了实例化对象的__A元素。

但是由于上面用了@property 所以可以直接用。也就是说,在t.A = 3这句话结束的时候就知道了,t.__A其实被改成了3了。

为了验证,我们做下面的输出

print(t.A) print(t.getA())

输出的结果是:

3 3

其实这里A也可以直接指向了这个类的私有变量__A了。同时对这个变量进行了修改。

可能有些搞笑。但是,我们这里实现了将一个__A这个私有变量变成了一个公有的变量A。

这里的核心就再之前的那里用了,@property 会将对应的函数变成变量。这看起来有点好玩。不过,我们还可以进一步的试一下~

我们将之前的类保持不变,但是我们改变那个测试函数。 变成下面的这样子~ t = Test() print(t.A) print(t.getA())

输出是

1 1

看到了没有,同样都是函数(A 和 getA),但是为了输出self.__A,前者直接就像元素一般直接溜了,但是后者,却还要用去调用。

如果直接用 t.A()

TypeError: ‘int’ object is not callable

就会有这样的错误。我写过一篇关于tuple的文章,里面也是解决了这个问题的。点这可以看这个文章 2. 再改改这个测试函数, 但是我们把那个 类的后面的两个函数(就是后面两个有装饰器的) 先注释掉

t = Test() t.A = 2

就会报下面的错误了

AttributeError: can’t set attribute

这个是可以理解的,因为,这里t.A其实 返回的是self.__A的实体,但是这个实体确实是没有办法改~ 所以也就没能set。

但是有趣的是,可能是我python解释器的原因,我是可以直接使用下面这样的语句的。哈哈哈,简直有毒,反而封装之后的元素是变成了真正的私有变量。

t.__A = 2 print(t.__A) 看到上面的这一个,其实就大概可以猜测出来我要干嘛了~ 我把类改写成这个样子~ class Test(object): def __init__(self): self.__A = 1 @property def _A(self): return self.__A

然后,我的测试函数是:

t = Test() print(t._A)

这样,我就实现了一个只能看不能改的私有变量。而且在我的IDE(Pycharm中使用是看不到原来那个__A,但是可以看到这个。这样看来,这个类就是实现了一个可以被看到的私有变量了~ 真刺激~)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有